import { getAuthObject, reportStatus, clearInfo } from "@/utils/Func";
import { getAuthCode } from "@/api/login";
import store from "../../store";
var vm = null;
var objAuth;
var authCode = "";
var scope = "<dogscope/>";

function setVm(vue) {
    vm = vue;
}

/**
 * 获取AuthCode
 */
function getAuthCodes() {
    return new Promise((resolve) => {
        getAuthCode().then((res) => {
            if (res.data.success) {
                resolve(res.data.data);
            }
        });
    });
}

/**
 *
 * @returns 检测超级狗
 */
async function checkDog() {
    // 检查超级狗
    let stat = "";
    if (authCode === "") {
        authCode = await getAuthCodes();
    }

    objAuth = getAuthObject();
    objAuth.EnumDog(authCode);

    if (
        navigator.userAgent.indexOf("Chrome") > 0 ||
        navigator.userAgent.indexOf("Firefox") > 0
    ) {
        objAuth.GetUserNameEx(scope, authCode);
    } else {
        //IE
        if (objAuth.hasOwnProperty("Open") === false) {
            vm.$message.info("您未安装系统必需的控件");
            setTimeout(checkDog, 5000);
            return;
        }
        stat = objAuth.Open(scope, authCode); //打开超级狗
        if (stat != 0) {
            vm.$message.info(reportStatus(stat));
        }
        stat = objAuth.GetUserName();
        if (stat != 0) {
            objAuth.Close();
            vm.$message.info(reportStatus(stat));
            return false;
        }
        vm.ruleForm.phoneEmail = objAuth.UserNameStr;
    }

    setTimeout(checkDog, 2000);
}

function loadFunc() {
    objAuth = getAuthObject();
    if (
        navigator.userAgent.indexOf("Chrome") > 0 ||
        navigator.userAgent.indexOf("Firefox") > 0
    ) {
        window.addEventListener(
            "message",
            (event) => {
                if (event.source !== window) {
                    return;
                }
                let ReturnText = event.data.text;

                if ("EnumDog" === ReturnText.InvokeMethod) {
                    if (0 == ReturnText.Status) {
                        vm.dogID = ReturnText.EnumResultStr;
                        return;
                    } else {
                        vm.dogID = "";
                        // reportStatus(Number(ReturnText.Status));
                        return;
                    }
                }
                if (event.data.type === "SNTL_FROM_HOST") {
                    // let ReturnText = event.data.text;

                    // console.log(event.data.text, "SNTL_FROM_HOST");
                    if ("GetUserNameEx" === ReturnText.InvokeMethod) {
                        vm.errorStatus = ReturnText.Status;
                        if (ReturnText.Status === "0") {
                            vm.ruleForm.phoneEmail = ReturnText.UserNameStr;
                            clearInfo();
                            if (vm.ruleForm.phoneEmail == "") {
                                vm.$message.info("设备未绑定帐号！");
                            }
                            return;
                        } else if (ReturnText.Status === "7") {
                            vm.ruleForm.phoneEmail = "";
                            reportStatus(Number(ReturnText.Status));

                            if (vm.$route.path != "/login") {
                                vm.$message.error(reportStatus(Number(ReturnText.Status)));
                                setTimeout(() => {
                                    store.dispatch("user/logout");
                                    location.reload();
                                }, 1000);
                            }
                            return;
                        } else {
                            reportStatus(Number(ReturnText.Status));
                            return;
                        }
                    }
                }
                return;
            },
            false
        );

        setTimeout(checkDog, 1000);
    } else if (window.ActiveXObject || "ActiveXObject" in window) {
        //IE
        objAuth.SetCheckDogCallBack("insertDog", "removeDog");
    } else {
        setTimeout(checkDog, 1000);
    }
}

/**
 * 登录
 */
// async function login() {
//     if (authCode === "") {
//         authCode = await getAuthCodes();
//     }
//     objAuth = getAuthObject();
//     objAuth.EnumDog(authCode);
//     window.onmessage = function(event) {
//         if (event.source !== window) {
//             return;
//         }
//         let ReturnText = event.data.text;
//         if ("EnumDog" === ReturnText.InvokeMethod) {
//             console.error(ReturnText, "text");
//             if (ReturnText.Status === "0") {
//                 var dogID = ReturnText.EnumResultStr; //1270101855
//                 console.error(dogID, "dogId");
//             } else {
//                 console.error("加密狗不存在");
//             }
//         }
//     };
//     // window.addEventListener(
//     //     "message",
//     //     (event) => {
//     //         if (event.source !== window) {
//     //             return;
//     //         }
//     //         let ReturnText = event.data.text;
//     //         if ("EnumDog" === ReturnText.InvokeMethod) {
//     //             console.error(ReturnText, "text");
//     //             if (ReturnText.Status === "0") {
//     //                 var dogID = ReturnText.EnumResultStr; //1270101855
//     //                 console.error(dogID, "dogId");
//     //             } else {
//     //                 console.error("加密狗不存在");
//     //             }
//     //         }
//     //     },
//     //     false
//     // );
// }

export default {
    setVm,
    checkDog,
    loadFunc,
};